<?php

namespace App\Http\Controllers\Landscaping;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\Landscaping\Landscaping;
use Illuminate\Database\QueryException;
use App\Http\Requests\Landscaping\LandscapingRequest;
use Grimzy\LaravelMysqlSpatial\Types\Polygon;

/**
 * @group 基础信息管理->绿化->绿化区域管理
 *
 * 采用 restful api
 *
 * Body Parameters 表示请求的所需要的参数
 *
 * Query Parameters 表示返回参数的名称
 */

class LandscapingController extends Controller
{
    /**
     * 园林基础数据查看所有----分页
     *
     * @bodyParam park_name string 园林名称
     * @bodyParam principal_id int 负责人id 外键 员工表
     * @bodyParam areas polygon 园林区域 (0 0,4 0,4 4,0 4,0 0)
     *
     * @queryParam park_name string 园林名称
     * @queryParam park_number int 园林编号
     * @queryParam park_address string 园林地址
     * @queryParam areas polygon 园林区域 (0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)
     * @queryParam yh_areas string 养护面积
     * @queryParam level int 养护等级 0一级 1二级 2三级
     * @queryParam employees->name string 负责人
     * @queryParam phone string 电话
     * @queryParam project_id int 环卫区域id 外键 环卫区域表
     */
    public function index(Request $request)
    {
    	$landscaping = new Landscaping;
        $data = $landscaping->getList($request);
    	return response()->json(encodeMsg($data,200));
    }

    /**
     * 园林基础数据查看所有----不分页
     *
     * @bodyParam park_name string 园林名称
     * @bodyParam principal_id int 负责人id 外键 员工表
     * @bodyParam areas polygon 园林区域 (0 0,4 0,4 4,0 4,0 0)
     *
     * @queryParam park_name string 园林名称
     * @queryParam park_number int 园林编号
     * @queryParam park_address string 园林地址
     * @queryParam areas polygon 园林区域 (0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)
     * @queryParam yh_areas string 养护面积
     * @queryParam level int 养护等级 0一级 1二级 2三级
     * @queryParam task_load string 任务量
     * @queryParam employees->name string 负责人
     * @queryParam phone string  电话
     * @queryParam project_id int 环卫区域id 外键 环卫区域表
     */
    public function getAll(Request $request)
    {
        $landscaping = new Landscaping;
        $data = $landscaping->getData($request);
        return response()->json(encodeMsg($data,200));
    }

    /**
     * 新增园林基础数据
     *
     * @bodyParam park_name string required 园林名称
     * @bodyParam park_number int required 园林编号
     * @bodyParam park_address string required 园林地址
     * @bodyParam areas polygon 园林区域 (0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)
     * @bodyParam yh_areas string 养护面积
     * @bodyParam level int 养护等级 0一级 1二级 2三级
     * @bodyParam principal_id int required 负责人id 外键 员工表
     * @bodyParam phone string required 电话
     * @bodyParam project_id int required 环卫区域id 外键 环卫区域表
     *
     * @queryParam park_name string 园林名称
     * @queryParam park_number int 园林编号
     * @queryParam park_address string 园林地址
     * @queryParam areas polygon 园林区域 (0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)
     * @queryParam yh_areas string 养护面积
     * @queryParam level int 养护等级 0一级 1二级 2三级
     * @queryParam principal_id int required 负责人id
     * @queryParam phone string required 电话
     * @queryParam project_id int 环卫区域id 外键 环卫区域表
     *
     */
    public function create(LandscapingRequest $request)
    {
        try {
            $data = $request->all();
            $areas = $request->input('areas','');
            if(!empty($areas)){
                $data['areas'] = Polygon::fromString($areas);
            }
            $data = Landscaping::create($data);
            return response()->json(encodeMsg($data,201));
        } catch (QueryException $e) {
            // dd($e);
            return response()->json(encodeMsg(['message' => '数据添加失败!'],400));
        }
    }

    /**
     * 查看园林基础数据
     *
     * @bodyParam id int required  园林ID
     *
     * @queryParam park_name string 园林名称
     * @queryParam park_number int 园林编号
     * @queryParam park_address string 园林地址
     * @queryParam areas polygon 园林区域 (0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)
     * @queryParam yh_areas string 养护面积
     * @queryParam level int 养护等级 0一级 1二级 2三级
     * @queryParam principal_id int required 负责人id
     * @queryParam phone string required 电话
     * @queryParam project_id int 环卫区域id 外键 环卫区域表
     *
     */
    public function show($id)
    {
        //创建模型
    	$landscaping = Landscaping::find($id);
        if($landscaping == []) {
            return response()->json(encodeMsg(["message" => "没有该园林信息!"], 404));
        } else {
        	return response()->json(encodeMsg($landscaping,200));
        }
    }

    /**
     * 修改园林基础数据
     *
     * @bodyParam park_name string required 园林名称
     * @bodyParam park_number int required 园林编号
     * @bodyParam park_address string required 园林地址
     * @bodyParam areas polygon 园林区域 (0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)
     * @bodyParam yh_areas string 养护面积
     * @bodyParam level int 养护等级 0一级 1二级 2三级
     * @bodyParam principal_id int required 负责人id 外键 员工表
     * @bodyParam phone string required 电话
     * @bodyParam project_id int 环卫区域id 外键 环卫区域表
     *
     * @queryParam park_name string 园林名称
     * @queryParam park_number int 园林编号
     * @queryParam park_address string 园林地址
     * @queryParam areas polygon 园林区域 (0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)
     * @queryParam yh_areas string 养护面积
     * @queryParam level int 养护等级 0一级 1二级 2三级
     * @queryParam principal_id int required 负责人id
     * @queryParam phone string required 电话
     * @queryParam project_id int 环卫区域id 外键 环卫区域表
     *
     */
    public function update(LandscapingRequest $request,$id)
    {
        //创建模型
        $landscaping = Landscaping::find($id);
        if($landscaping == []) {
            return response()->json(encodeMsg(["message" => "没有该园林信息!"], 404));
        }
        try {
            $data = $request->all();
            $areas = $request->input('areas','');
            if(!empty($areas)){
                $data['areas'] = Polygon::fromString($areas);
            }
            $landscaping->update($data);
            return response()->json(encodeMsg($landscaping,200));
        } catch (QueryException $e) {
            return response()->json(encodeMsg(['message' => '数据修改失败!'],400));
        }
    }

    /**
     * 删除园林基础数据
     *
     * @bodyParam id int required  表ID
     * @response 204 {
     *   "message": "删除成功"
     * }
     *
     *
     * @response 404 {
     *  "message": "没有该园林信息"
     * }
     */
    public function delete($id)
    {
        //创建模型
        $landscaping = Landscaping::find($id);
        if($landscaping == []) {
            return response()->json(encodeMsg(["message" => "没有该园林信息!"], 404));
        }
        if($landscaping->delete()) {
            return response()->json(encodeMsg(["message" => "删除成功"], 204));
        } else {
            return response()->json(encodeMsg(["message" => "删除失败"], 400));
        }
    }

    /**
     * 园林基础数据地图搜索
     *
     * @bodyParam park_name string 园林名称
     * @bodyParam park_number int 园林编号
     * @bodyParam park_address string 园林地址
     * @bodyParam areas polygon 园林区域 (0 0,4 0,4 4,0 4,0 0)
     *
     * @queryParam park_name string 园林名称
     * @queryParam park_number int 园林编号
     * @queryParam park_address string 园林地址
     * @queryParam areas polygon 园林区域 (0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)
     * @queryParam yh_areas string 养护面积
     * @queryParam level int 养护等级 0一级 1二级 2三级
     * @queryParam principal_id int required 负责人id
     * @queryParam phone string required 电话
     * @queryParam project_id int 环卫区域id 外键 环卫区域表
     * @response 404 {
     *  "message": "没有该园林信息"
     * }
     */
    public function select(Request $request)
    {
        $landscaping = new Landscaping;
        $landscaping = $landscaping->findForList($request);
        // dd($landscaping);
        if($landscaping->isEmpty()) {
            return response()->json(encodeMsg(["message" => "没有该园林信息!"], 404));
        }
        return response()->json(encodeMsg($landscaping,200));
    }
}
